﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;

/// <summary>
/// Summary description for DB
/// </summary>
public class DB
{
	public DB()
	{

	}

    public SqlConnection GetConnection()
    {
        string conString = ConfigurationManager.ConnectionStrings["DBverbinding"].ConnectionString;

        SqlConnection con = new SqlConnection(conString);
        return con;
    }

    public DataTable getFilms()
    {
        string sql = string.Format("SELECT Naam,Img,[3D],KijkWijzer,Versie FROM Films");
        SqlDataAdapter da = new SqlDataAdapter(sql, GetConnection());
        DataTable dt = new DataTable("Films");
        da.Fill(dt);
        foreach (DataRow rij in dt.Rows)
        {
            DataTable dt2 = getTijden((string)rij[0]);

            if (dt2.Rows.Count <= 0)
            {
                rij.Delete();
            }
        }
        dt.AcceptChanges();
        return dt;
     }



    public DataTable getKaartjes(string rang)
    {
        string Rang = rang.Replace(" ", "");
        string sql = string.Format("SELECT Soort," + Rang + " FROM Soorten");

        SqlDataAdapter da = new SqlDataAdapter(sql, GetConnection());

        DataTable dt = new DataTable("Soorten");
        da.Fill(dt);
        return dt;
    }

    public DataTable getTijden(string FilmNaam)
    {
        DateTime datum = DateTime.Now;
        int Jaar = datum.Year;
        int Maand = datum.Month;
        int Dag = datum.Day;
        int uur = datum.Hour;
        int min = datum.Minute;
        string stijd = uur +""+min;
        int itijd = Convert.ToInt32(stijd);
        string sDatum = (Convert.ToString(Dag) + "-" + Convert.ToString(Maand) + "-" + Convert.ToString(Jaar));

        string sql = string.Format("SELECT FilmNaam,Tijd,ZaalID,ID FROM FilmTijden WHERE Datum='" + sDatum + "'AND FilmNaam='" + FilmNaam + "' ORDER BY Tijd ASC");
        // WHERE Datum='"+sDatum+"'AND FilmNaam='"+FilmNaam +"'
        SqlDataAdapter da = new SqlDataAdapter(sql, GetConnection());

        DataTable dt = new DataTable("Tijden");
        da.Fill(dt);
       // DataTable dt2 = new DataTable("Tijden2");
        foreach( DataRow film in dt.Rows){
            string tijd = (string)film[1];
            tijd= tijd.Replace(":", "");
            if (itijd > Convert.ToInt32(tijd))
            {
                film.Delete();
            }
            
        }
        dt.AcceptChanges();
         return dt;
    }

    public DataTable getPlattengrond(int zaal)
    {

        string sql1 = string.Format("SELECT Formaat FROM Zalen WHERE ZaalID ='" + zaal + "'");
        SqlDataAdapter da1 = new SqlDataAdapter(sql1, GetConnection());

        DataTable Zaal = new DataTable("zaalFormaat");
        da1.Fill(Zaal);

        DataRow dr = Zaal.Rows[0];
        string formaat = (string)dr[0];
        string sql2 = string.Format("SELECT Soort,RijNr,Formatie FROM Plattengrond WHERE Soort='" + formaat + "' ");

        SqlDataAdapter da = new SqlDataAdapter(sql2, GetConnection());

        DataTable dt = new DataTable("Plattengrond");
        da.Fill(dt);
        return dt;
    }

    public DataTable getPlaatsen(int TijdID)
    {
        string sql = string.Format("SELECT Stoelnummer,Status FROM Plaatsen WHERE FilmtijdID ='" + TijdID + "' ORDER BY Stoelnummer ASC");

        SqlDataAdapter da = new SqlDataAdapter(sql, GetConnection());

        DataTable dt = new DataTable("Stoelen");
        da.Fill(dt);
        return dt;
    }

    public void maakVoorstellling()
    {
        SqlConnection conn = GetConnection();
        DateTime datum = DateTime.Now;
        int Jaar = datum.Year;
        int Maand = datum.Month;
        int Dag = datum.Day;
        string sDatum = (Convert.ToString(Dag) + "-" + Convert.ToString(Maand) + "-" + Convert.ToString(Jaar));
        conn.Open();
        string sql = string.Format("SELECT ID,ZaalID FROM FilmTijden WHERE Datum='" + sDatum + "'");
        SqlDataAdapter da1 = new SqlDataAdapter(sql, conn);
        conn.Close();
        DataTable voorstellingen = new DataTable("Voorstellingen");
        da1.Fill(voorstellingen);
        DataRow dr = voorstellingen.Rows[1];
        int id = (int)dr[1];
        int aantal = voorstellingen.Rows.Count;
        foreach (DataRow rij in voorstellingen.Rows)
        {
            int Filmid = (int)rij[0];
            int zaalid = (int)rij[1];
            conn.Open();
            string sql2 = string.Format("SELECT ZaalID,AantalStoelen FROM Zalen WHERE ZaalID='" + zaalid + "'");
            SqlDataAdapter da2 = new SqlDataAdapter(sql2, conn);
            conn.Close();
            DataTable zalen = new DataTable("Zalen");
            da2.Fill(zalen);
            foreach (DataRow rij2 in zalen.Rows)
            {
                int aantalstoelen = (int)rij2[1];
                string Status = "Vrij";

                for (int i = 0; i < aantalstoelen; i++)
                {

                    conn.Open();
                    string sqlIns = "INSERT INTO Plaatsen (FilmtijdID,ZaalID,Stoelnummer,Status) VALUES ('" + Filmid + "', '" + zaalid + "','" + i + "','" + Status + "')";
                    SqlCommand cmdIns = new SqlCommand(sqlIns, conn);
                    cmdIns.ExecuteNonQuery();
                    conn.Close();
                }
            }

        }
    }

    public void updatePlaatsen(ArrayList plaatsen, int ZaalID, int TijdID)
    {
        SqlConnection conn = GetConnection();
        conn.Open();
        foreach (int i in plaatsen)
        {
            int StoelNr = i-1;
            string sql = string.Format("UPDATE Plaatsen SET Status='Bezet' WHERE ZaalID = '" + ZaalID + "' AND FilmtijdID = '" + TijdID + "' AND Stoelnummer = '" + StoelNr + "'");
            SqlCommand cmdIns = new SqlCommand(sql, conn);
            cmdIns.ExecuteNonQuery();
        }
        conn.Close();
    }


    public DataRow getReservering(int reservering)
    {

        string sql = string.Format("SELECT * FROM TransactieHeader WHERE TransactieID = '"+reservering+"'");
        SqlDataAdapter data = new SqlDataAdapter(sql, GetConnection());
        DataTable Reserveringsrecord = new DataTable("TransactieDetail");
        data.Fill(Reserveringsrecord);
        DataRow Recordreserving = Reserveringsrecord.Rows[0];

        return Recordreserving;

    }

    public void tijdelijkeUpdateStoel(string soortaanroep,int plaats, int ZaalID, int TijdID)
    {
        SqlConnection conn = GetConnection();
        string status = "Vrij";
        if(soortaanroep.Equals("zetvast")){
            status = "Tijdelijkbezet";
        }
        conn.Open();
        
            int hplaats = plaats - 1;
            string sql = string.Format("UPDATE Plaatsen SET Status='"+status+"' WHERE ZaalID = '" + ZaalID + "' AND FilmtijdID = '" + TijdID + "' AND Stoelnummer = '" + hplaats + "'");
            SqlCommand cmdIns = new SqlCommand(sql, conn);
            cmdIns.ExecuteNonQuery();
        
        conn.Close();
    }

    public bool stoelCheck(int stoelnr, int ZaalID, int TijdID)
    {
        int stoell = stoelnr - 1;
        string sql = string.Format("SELECT Status FROM Plaatsen  WHERE ZaalID = '" + ZaalID + "' AND FilmtijdID = '" + TijdID + "' AND Stoelnummer = '" + stoell + "'");
        SqlDataAdapter data = new SqlDataAdapter(sql, GetConnection());
        DataTable stoel = new DataTable("stoel");
        data.Fill(stoel);
        DataRow stoelrij = stoel.Rows[0];
        bool check = false;
        string status = (string)stoelrij[0];
        if (status.Equals("Tijdelijkbezet"))
        {
            check = true;
        }
        return check;

    }

    public string[] getReserveringDetails(int TransactieHeaderID)
    {
        string sql = string.Format("SELECT * FROM TransactieDetail WHERE TransactieHeaderID = '" + TransactieHeaderID + "'");
        SqlDataAdapter data = new SqlDataAdapter(sql, GetConnection());
        DataTable Details = new DataTable("Details");
        data.Fill(Details);
        string[] soorten = new string[Details.Rows.Count];
        int teller =0;
        foreach(DataRow rij in Details.Rows)
        {
            soorten[teller] = "" + rij[2].ToString() + "-" + rij[3].ToString() + "-" + rij[4].ToString();
            teller++;
        }

        return soorten;

    }
    
    public string getFilmNaam(string nummer)
    {

        string reservering = nummer.Replace(" ", "");

        string sql = string.Format("SELECT FilmNaam FROM TransactieHeader WHERE TransactieHeaderID = '" + reservering + "'");

        SqlDataAdapter data = new SqlDataAdapter(sql, GetConnection());

        DataTable datatabel = new DataTable("TransactieDetail");
        data.Fill(datatabel);

        DataRow filmnaamrow = datatabel.Rows[0];
        string filmnaam = (string)filmnaamrow[0];

        return filmnaam;
    }

    public void updateReserveringBetaald(string nummer)
    {
        string reservering = nummer.Replace(" ", "");
        SqlConnection conn = GetConnection();
        string sql = string.Format("UPDATE TransactieHeader SET Status='Betaald' WHERE TransactieID = '" + reservering + "' AND Status = 'Gereserveerd'");
        conn.Open();
        SqlCommand cmdIns = new SqlCommand(sql, conn);
        cmdIns.ExecuteNonQuery();
        conn.Close();
    }

    public void updateReserveringUitgeprint(string nummer)
    {
        string reservering = nummer.Replace(" ", "");
        string sql = string.Format("UPDATE TransactieHeader SET Status='Uitgeprint' WHERE TransactieID = '" + reservering + "' AND Status = 'Betaald'");
        SqlConnection conn = GetConnection();
        conn.Open();
        
        SqlCommand cmdIns = new SqlCommand(sql, conn);
        cmdIns.ExecuteNonQuery();
        conn.Close();
    }

    /* bijzondere kaarten kopen */

    public DataTable getBijzKaarten()
    {
        string sql = string.Format("SELECT * FROM BijzKaarten");
        SqlDataAdapter da = new SqlDataAdapter(sql, GetConnection());

        DataTable dt = new DataTable("bijzKaarten");
        da.Fill(dt);
        return dt;
    }

    /* Login */
    public Boolean authenticateUser(string gebruikersnaam, string wachtwoord)
    {
        SqlCommand cmd = new SqlCommand("SELECT * FROM GebruikersAccounts WHERE Emailadres='" + gebruikersnaam + "' AND Wachtwoord='" + wachtwoord + "'");
        cmd.Connection = GetConnection();
        cmd.Connection.Open();
        SqlDataReader dr = cmd.ExecuteReader();

        if (dr.HasRows)
        {
            return true;
        }

        else
        {
            return false;
        }
        cmd.Connection.Close();
    }

    /* SQL opdrachten gevonden voorwerpen */

    public DataTable getVoorwerpen()
    {
        string sql = string.Format("SELECT Naam,Datum,Omschrijving FROM Voorwerpen");
        SqlDataAdapter da = new SqlDataAdapter(sql, GetConnection());

        DataTable dt = new DataTable("Voorwerpen");
        da.Fill(dt);
        return dt;
    }

    public DataTable getZoekOpdracht(string zoek)
    {
        string sql = string.Format("SELECT ItemID,Naam,Datum,Omschrijving,Status FROM Voorwerpen WHERE ItemID LIKE '%" + zoek + "%'OR Naam LIKE '%" + zoek + "%' OR Datum LIKE '%" + zoek + "%' OR Omschrijving LIKE '%" + zoek + "%' OR Status LIKE '%" + zoek + "%'");
        SqlDataAdapter da = new SqlDataAdapter(sql, GetConnection());

        DataTable dt = new DataTable("Voorwerpen");
        da.Fill(dt);
        return dt;
    }


    public DataTable getReserveringen(string resnr)
    {
        string sql = string.Format("Select TransactieID,FilmNaam,FilmtijdID,Zaal,Rang,Status from Transactieheader WHERE TransactieID LIKE '%" + resnr + "%'");
        SqlDataAdapter da = new SqlDataAdapter(sql, GetConnection());

        DataTable dt = new DataTable("reserveringen");
        da.Fill(dt);
        return dt;
    }
}